看到題目和提示,知道這題和解密有關,看到 tag 可以得知更詳細的資訊,能知道此題是和 base64 和 Caesar 加密有關。
hint:Engaging in various decoding processes is of utmost importance
將題目的檔案下載,發現得到一個 enc_flag。
$ ls -l
total 12
-rw-r--r-- 1 root root 4443 Aug 2 05:14 README.txt
-rw-rw-r-- 1 user user 73 Mar 12 00:36 enc_flag
先用file
指令,知道 enc_flag 是文字檔。
於是使用 cat
,查看 enc_flag 裡有甚麼,結果得到一串字串。
$ file enc_flag
enc_flag: ASCII text
$ cat enc_flag
YidkM0JxZGtwQlRYdHFhR3g2YUhsZmF6TnFlVGwzWVROclh6ZzJhMnd6TW1zeWZRPT0nCg==
由題目的 tag 知道,這應該是 base64 加密過後的字串。那現在就來介紹一下 base64 是甚麼。
Base64 是一種將二進制數據表示為 ASCII 字符集中可打印字符的編碼方式,也就是 (1) 大寫字母(A-Z)、(2) 小寫字母(a-z)、(3) 數字(0-9)以及 (4) 兩個額外的字符(通常是+和/),總共 64個字符,常用於電子郵件、URL 或 XML 等文字傳輸機制進行傳輸。
Base64 的編碼很簡單,分成以下三個步驟:
而解碼就是將加密步驟反過來就是了。
詳細步驟,可參考:Web 傳輸的摩斯密碼,base64介紹、深入了解Base64編碼和解碼:應用、原理及注意事項
回到題目,於是以 base64 -d
解碼,發現又得到一個很像 base64 加密後的內文。
$ base64 -d enc_flag
b'd3BqdkpBTXtqaGx6aHlfazNqeTl3YTNrXzg2a2wzMmsyfQ=='
於是再次用 base64 解碼,得到一串文字。
$ base64 -d enc_flag | cut -d "'" -f2
d3BqdkpBTXtqaGx6aHlfazNqeTl3YTNrXzg2a2wzMmsyfQ==
$ base64 -d enc_flag | cut -d "'" -f2 | base64 -d
wpjvJAM{jhlzhy_k3jy9wa3k_86kl32k2}
觀察字串並且想起 tag 提到的 Caesar 加密,猜測得到的字串應該需要經過位移才能得到正確的 flag。而 w 到 p 需要經過右移 19 個位置,因此我們使用 rot 19 ( rotation 19 ),就能得到解答啦。
小結:
了解 base64 編碼和解碼的基本步驟,並知道 Caesar 加密可以使用 rot 來實現位移解密。